﻿using System;
using BLL.Model.Base;

namespace BLL.Interface.Base
{
    /// <summary>
    /// 负责维护当前已登录用户的列表，该类已被注册为单例
    /// </summary>
    public interface ILoginHelper
    {
        /// <summary>
        /// 新增一个登录用户
        /// </summary>
        /// <param name="userInfo"></param>
        /// <returns></returns>
        bool AddLoginUser(LoginUserInfo userInfo);

        /// <summary>
        /// 删除一个登录用户信息（通常用在用户注销）
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        bool DeleteLoginUser(string userId);

        /// <summary>
        /// 获取一个登录用户的信息
        /// </summary>
        /// <param name="userId">保存在Session中的用户编号</param>
        /// <returns></returns>
        LoginUserInfo FindLoginUserInfo(string userId);

        /// <summary>
        /// 判断用户是否已经登录
        /// </summary>
        /// <param name="accountName"></param>
        /// <returns></returns>
        bool CheckUserIsLogin(string accountName);

        /// <summary>
        /// 验证用户登录
        /// </summary>
        /// <param name="loginHandler">验证方法（如果身份验证不通过，必须返回NULL）</param>
        /// <param name="sessionId">返回sessionId</param>
        /// <returns>是否验证成功</returns>
        bool Login(Func<LoginUserInfo> loginHandler, out string sessionId);

        /// <summary>
        /// 用户注销
        /// </summary>
        /// <param name="logOutHandler">注销方法</param>
        /// <returns>注销是否成功</returns>
        bool LogOut(Func<LoginUserInfo> logOutHandler);

    }
}